package com.example.smartwaterapi.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.smartwaterapi.entity.User;

/**
 * 用户服务接口
 */
public interface UserService extends IService<User> {

    /**
     * 通过手机号获取用户
     */
    User getByPhone(String phone);

    /**
     * 通过openid获取用户
     */
    User getByOpenid(String openid);

    /**
     * 通过openid获取用户ID
     */
    Long getUserIdByOpenid(String openid);

    /**
     * 更新用户最后登录时间和code
     */
    boolean updateLastLogin(Long userId, String loginCode);

    /**
     * 获取最近使用特定登录code的用户
     */
    User getRecentLoginUserByCode(String loginCode);

    /**
     * 获取最近使用部分匹配登录code的用户
     */
    User getRecentLoginUserByPartialCode(String partialCode);

    /**
     * 创建或更新微信用户
     */
    User createOrUpdateWechatUser(String openid, String sessionKey, String nickname, String avatar, Integer gender);

    /**
     * 修改用户密码
     */
    boolean updatePassword(String phone, String password);

    /**
     * 注册用户
     */
    User register(String phone, String password, String nickname);

    /**
     * 更新用户饮水目标
     */
    boolean updateDailyGoal(Long userId, Integer dailyGoal);
    /**
     * 更新用户提醒设置
     */
    boolean updateReminderSettings(Long userId, Integer enabled, Integer interval);

    /**
     * 分页查询用户列表
     */
    Page<User> listUsers(Integer pageNum, Integer pageSize, String keyword);

    /**
     * 更新用户积分
     * 
     * @param userId 用户ID
     * @param points 积分变动值（正数增加，负数减少）
     * @return 是否更新成功
     */
    boolean updatePoints(Long userId, Integer points);
    
    /**
     * 通过手机号更新用户微信信息
     * 
     * @param phone 手机号
     * @param openid 微信openid
     * @param unionid 微信unionid
     * @param sessionKey session密钥
     * @return 是否更新成功
     */
    boolean updateUserByPhone(String phone, String openid, String unionid, String sessionKey);

    /**
     * 通过微信公众号openid获取用户
     * 
     * @param wxOpenid 微信公众号openid
     * @return 用户对象
     */
    User getByWxOpenid(String wxOpenid);

    /**
     * 通过微信公众号openid获取用户ID
     * 
     * @param wxOpenid 微信公众号openid
     * @return 用户ID
     */
    Long getUserIdByWxOpenid(String wxOpenid);

    /**
     * 通过微信unionid获取用户
     * 
     * @param unionid 微信unionid
     * @return 用户对象
     */
    User getByUnionid(String unionid);

    /**
     * 更新用户的微信公众号openid
     * 
     * @param userId 用户ID
     * @param wxOpenid 微信公众号openid
     * @return 是否更新成功
     */
    boolean updateWxOpenid(Long userId, String wxOpenid);
    
    /**
     * 检查用户是否存在
     * 
     * @param openid 微信OpenID
     * @return 是否存在
     */
    boolean checkUserExists(String openid);

    /**
     * 创建用户并确保返回ID
     * 
     * @param user 用户对象
     * @return 创建后的用户对象，包含ID
     */
    User createUserAndGetId(User user);
}

